/**
 * 将一个正常的object 类转换成为每个层级
 * 的属性都是响应式(可以被侦察的)object
 */
import { def } from "./utils";
import defineReactive from "./defineReactive.js";
import arrayMethods from "./array";
import observe from "./observe";
import Dep from "./Dep.js";
export default class Observer {
  constructor(value) {
    // 每个observer上面都有一个Dep
    this.dep = new Dep();
    def(value, '__ob__', this, false);
    // 每个层级都能被侦测=>遍历
    // 检查是数组还是对象
    if (Array.isArray(value)) {
      console.log("你操作的是数组")
      // arrayMethods()
      Object.setPrototypeOf(value, arrayMethods)
      this.observeArray(value);//数组操作
    } else {
      this.walk(value)
    }
  }
  walk(value) {
    for (let k in value) {
      defineReactive(value, k)
    }
  }
  // 数组的特殊遍历
  observeArray(arr) {
    for (let i = 0, l = arr.length; i < l; i++) {
      observe(arr[i])
    }
  }
}